<?php

namespace App\Http\Controllers\Wap;

use App\Models\Order;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Http\Request;

class PaymentController extends WapController
{

    // 通过微信支付
    public function payByWechat(Request $request, Order $order)
    {
        $user = $request->get('user');
        // 判断订单是否属于当前用户
        if ($order->user_id != $user->id) {
            return $this->failed('订单和用户身份不一致');
        }
        // 订单已支付或者已关闭
        // 校验订单状态
        if ($order->paid_at || $order->closed) {
            return $this->failed('订单状态不正确');
        }
        try {
            // scan 方法为拉起微信扫码支付
            $wechatOrder = app('wechat_pay')->mp([
                'out_trade_no' => $order->no,
                'total_fee'    => $order->pay_amount * 100,      // 微信的金额单位是：分
                'body'         => '欧克鉴定服务',  // 订单描述
                'openid'       => $user->weixin_openid,
            ]);
        } catch (\Exception $e) {
            $message = $e->getMessage();
            \Log::warning('支付警告：'. $order->no . $message);
            return $this->failed('支付出现异常');
        }

        return $this->success($wechatOrder);
    }


    // 微信支付回调
    public function wechatNotify()
    {
        // 校验回调参数是否正确
        $data = app('wechat_pay')->verify();
        // 找到对应的订单
        $order = Order::where('no', $data->out_trade_no)->first();
        // 订单不存在则告知微信
        if (!$order) {
            return 'fail';
        }
        // 如果订单已经是支付状态
        if ($order->paid_at) {
            // 告知微信此订单已处理
            return app('wechat_pay')->success();
        }

        \DB::transaction(function () use ($order, $data) {
            $order->update([
                'paid_at'        => Carbon::now(),
                'payment_method' => 'wechat',
                'payment_no'     => $data->transaction_id,
            ]);

            // 判断，如果订单里有优惠券，去消费掉优惠券
            if($order->coupon_amount > 0){
                User::where('id', $order->user_id)->update(['coupon_use' => 1]);
            }
        });

        // 告知微信此订单已处理
        return app('wechat_pay')->success();
    }


}
